﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using WCFVeterinaria;

public partial class clasifAnimal : System.Web.UI.Page
{
    #region Variables globales
    ServiceVeterinaria gestorVet = new ServiceVeterinaria();
    #endregion

    #region Evento para cargar la página
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["username"] == null)
        {
            Response.Redirect("/Login.aspx");
        }
        try
        {
            if (!IsPostBack)
            {
                lblMensaje.Visible = false;
                lblMensaje.Text = "";
                ObtenerClasificacionAnimal();
            }
        }
        catch (Exception oEx)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
        }
    }
    #endregion

    #region Evento Nuevo
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        txtClasificacionID.Enabled = true;
        limpiar();
        txtClasificacionID.Focus();
    }
    #endregion

    #region Evento Agregar
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        try
        {
            gestorVet.agregarClaseAnimal(txtNombre.Text, txtCaracteristica.Text);
            ObtenerClasificacionAnimal();
            lblMensaje.Visible = true;
            lblMensaje.Text = "Registro insertado satisfactoriamente";
            lblMensaje.CssClass = "mensajeCorrecto";
        }
        catch (Exception oEx)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
            lblMensaje.CssClass = "mensajeError";
        }
    }
    #endregion

    #region Evento Modificar
    protected void btnModificar_Click(object sender, EventArgs e)
    {
        try
        {
            int clasificacionID = Convert.ToInt32(txtClasificacionID.Text);
            gestorVet.actualizarClaseAnimal(clasificacionID, txtNombre.Text, txtCaracteristica.Text);
            ObtenerClasificacionAnimal();
            lblMensaje.Visible = true;
            lblMensaje.Text = "Registro modificado satisfactoriamente";
            lblMensaje.CssClass = "mensajeCorrecto";
        }
        catch (Exception oEx)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
            lblMensaje.CssClass = "mensajeError";
        }
    }
    #endregion

    #region Evento Eliminar
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            int clasificacionID = Convert.ToInt32(txtClasificacionID.Text);
            gestorVet.eliminarClaseAnimal(clasificacionID);
            ObtenerClasificacionAnimal();
            limpiar();
            lblMensaje.Visible = true;
            lblMensaje.Text = "Registro eliminado satisfactoriamente";
            lblMensaje.CssClass = "mensajeCorrecto";
        }
        catch (Exception oEx)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
            lblMensaje.CssClass = "mensajeError";
        }
    }
    #endregion

    #region Evento Consultar
    protected void btnConsultar_Click(object sender, EventArgs e)
    {
        try
        {
            int clasificacionID = Convert.ToInt32(txtClasificacionID.Text);
            ClaseAnimal claseAnimal = gestorVet.consultarClaseAnimal(clasificacionID);
            if (claseAnimal == null)
            {
                lblMensaje.Visible = true;
                lblMensaje.Text = "No existe la clasificación con el ID " + txtClasificacionID.Text;
                lblMensaje.CssClass = "mensajeError";
            }
            else
            {
                txtClasificacionID.Text = claseAnimal.ClasificacionID.ToString();
                txtNombre.Text = claseAnimal.Nombre;
                txtCaracteristica.Text = claseAnimal.Caracteristica;
            }
        }
        catch (Exception oEx)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
            lblMensaje.CssClass = "mensajeError";
        }
    }
    #endregion

    #region Método para limpiar el texto
    private void limpiar()
    {
        txtClasificacionID.Text = "";
        txtNombre.Text = "";
        txtCaracteristica.Text = "";
        lblMensaje.Text = string.Empty;
    }
    #endregion

    #region Métodos para manejar las columnas del grid
    /// <summary>
    /// Columnas del grid
    /// </summary>
    private enum Columnas
    {
        ClasificacionID,
        Nombre,
        Caracteristica
    }
    #endregion

    #region Método para obtener la clasificación Animal
    private void ObtenerClasificacionAnimal()
    {
        try
        {
            DataTable _ClasifAnimal = gestorVet.listarClasesAnimal();

            gvClasifAnimal.DataSource = _ClasifAnimal;
            gvClasifAnimal.DataBind();
            
            //Se guarda el source para utilizarlo en la opción de ordenar
            //ViewState["ClasifAnimal_DataSource"] = gvClasifAnimal.DataSource;

            //Session que se va a utilizar para la paginación
            Session["DsClasifAnimal"] = _ClasifAnimal;
        }
        catch (Exception oEx)
        {
            #region Manejo de la excepcion
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
            lblMensaje.CssClass = "mensajeError";
            #endregion Manejo de la excepción.
            throw;
        }
    }
    #endregion

    #region Evento cambio de página
    protected void gvClasifAnimal_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            //Se obtiene la bandeja y se gestiona el evento de cambio de página.
            if ((DataTable)(Session["DsClasifAnimal"]) != null)
            {
                DataTable dtTabla = (DataTable)(Session["DsClasifAnimal"]);
                gvClasifAnimal.PageIndex = e.NewPageIndex;
                gvClasifAnimal.DataSource = ((DataTable)Session["DsClasifAnimal"]).DefaultView;

                //Si la bandeja se había ordenado por alguna de las columnas se mantiene el mismo orden para cada página.
                if (Session["sortDirection"] != null)
                {
                    DataView dataView = new DataView(dtTabla);
                    if (Session["sortDirection"].ToString().Equals(SortDirection.Ascending.ToString()))
                        dataView.Sort = Session["sortExpression"] + " " + ConvertSortDirectionToSql(SortDirection.Ascending);
                    else
                        dataView.Sort = Session["sortExpression"] + " " + ConvertSortDirectionToSql(SortDirection.Descending);

                    gvClasifAnimal.DataSource = dataView;
                }
                gvClasifAnimal.DataBind();
            }
        }
        catch (Exception oEx)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
        }
    }
    #endregion

    #region Evento para ordenar la clasificacion animal
    private string ConvertSortDirectionToSql(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;
        switch (sortDirection)
        {
            case SortDirection.Ascending:
                newSortDirection = "ASC";
                break;
            case SortDirection.Descending:
                newSortDirection = "DESC";
                break;
        }
        return newSortDirection;
    }

    protected void gvClasifAnimal_Sorting(object sender, GridViewSortEventArgs e)
    {
        try
        {
            DataTable dataTable;
            dataTable = (DataTable)(Session["DsClasifAnimal"]);

            //Se controla la direccion de las columnas, si se selecciona la misma columna dos veces se cambia de direccion 
            //ya sea ascendente o descendente
            if (Session["sortExpression"] != null && Session["sortExpression"].ToString() == e.SortExpression.ToString())
            {
                if (Session["sortDirection"].ToString().Equals(SortDirection.Ascending.ToString()))
                    e.SortDirection = SortDirection.Descending;
            }
            if (dataTable != null)
            {
                DataView dataView = new DataView(dataTable);
                dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
                gvClasifAnimal.DataSource = dataView;
                gvClasifAnimal.DataBind();
                Session["sortExpression"] = e.SortExpression;
                Session["sortDirection"] = e.SortDirection;
            }
        }
        catch
        {
            throw;
        }
    }
    #endregion

    #region Evento para seleccionar una clasificación
    protected void gvClasifAnimal_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        try
        {
            lblMensaje.Visible = false;
            GridViewRow gvrFilaSeleccionada = gvClasifAnimal.Rows[e.NewSelectedIndex];
            txtClasificacionID.Text = Convert.ToString(gvrFilaSeleccionada.Cells[(int)Columnas.ClasificacionID].Text.Trim());
            txtNombre.Text = Convert.ToString(gvrFilaSeleccionada.Cells[(int)Columnas.Nombre].Text.Trim().Replace("&nbsp;", ""));
            txtCaracteristica.Text = Convert.ToString(gvrFilaSeleccionada.Cells[(int)Columnas.Caracteristica].Text.Trim().Replace("&nbsp;", ""));
            txtClasificacionID.Enabled = false;
        }
        catch (Exception oEx)
        {
            lblMensaje.Visible = true;
            lblMensaje.Text = oEx.Message;
        }
    }
    #endregion

}